package com.carrey.carrey_utils;

import java.io.File;

/**
 * 
 * @Title:文件工具类
 * @Description
 * @author Carre
 * @date 2020-12-16
 * @param FileUtils.java
 */
public class FileUtils {

	/**
	 * 	获取用户当前目录的路径
	 * @return
	 */
	public static File getUserPath() {
		String property = System.getProperty("user.dir");
		return new File(property);
	}

	// 获取操作系统目录的路径
	public static String getSystemPath() {
		String property = System.getProperty("user.home");
		return property;
	}

	// 获取操作系统临时目录
	public static String getTmpDir() {
		String property = System.getProperty("java.io.tmpdir");
		return property;
	}

	// 获取一个文件的根路径(返回值：string)
	public static String getRootToStr(File file) {
		// 获取文件的路径地址
		String path = file.getPath();
		// 过滤文件地址
		return path.substring(0, path.indexOf(":") + 1);
	}

	// 获取一个文件的根路径(返回值：file)
	public static File getRootToFile(File file) {
		// 获取文件的路径地址
		String path = file.getPath();
		// 过滤文件地址
		return new File(path.substring(0, path.indexOf(":") + 1));
	}

	// 获取当前所在的路径
	public static File getRoot() {
		// 获取当前所在目录
		File userDir = getUserPath();
		// 根据当前所在目录，获取其根目录
		return getRootToFile(userDir);
	}

	/**
	 * 	获取文件的扩展名
	 * @param fileName
	 * @return
	 */
	public static String getFileExtensions(String fileName) {
		// 获取文件最后一个.的下标
		int index = fileName.lastIndexOf(".");

		if (index < 0) {
			return "文件名不正确";
		}

		// 根据下标截取
		String file_exten = fileName.substring(index);

		return file_exten;
	}

	public static String getFileExtensions(File file) {
		// 获取文件名称
		String name = null;
		if (file.exists()) {
			name = file.getName();
		}
		if (name == null) {
			return "文件不存在 ";
		}
		return getFileExtensions(name);
	}

	// 
	/**
	 * 	删除文件或文件夹(递归)
	 * @param file
	 */
	public static void deletes(File file) {
		// 获取其下子文件和子目录
		File[] files = file.listFiles();

		if (files != null && files.length > 0) {
			// 循环遍历
			for (File f : files) {
				// 如果是文件，直接删除
				if (f.isFile()) {
					f.delete();
				} else {
					// 如果是目录(文件夹)，使用递归调用
					deletes(f);
				}
			}
		}
		// 将文件夹或者文件本身删除
		file.delete();
	}
	
	// 获取对应的文件大小
	public static long getFileSize(File file, FileSizeUnit  unit) {
        //获取文件的字节大小
        long length = file.length();
        
        //根据传过来的单位，计算对应的数据
        return length/unit.getCode();
    }
	
	// 获取所在磁盘的总空间
	public static long getTotalSpace(File file,  FileSizeUnit unit) {
        //获取磁盘根目录
        File root = getRootToFile(file);
        
        //获取总大小
        long totalSpace = root.getTotalSpace();
        
        //根据传过来的单位，计算对应的数据
        return totalSpace/unit.getCode();
    }
	
	// 获取磁盘的总空间
	public static long getFreeSpace(FileSizeUnit unit) {
        //获取磁盘根目录
        File root = getRoot();
        
        //获取总大小
        long freeSpace = root.getFreeSpace();
        
        //根据传过来的单位，计算对应的数据
        return freeSpace/unit.getCode();
    }

}
